#include <iostream>

// 前向声明
class Garden;

// 园艺师类
class Gardener {
public:
    void careForPlant(const Garden& g);
};

// 花园类，拥有一些稀有植物
class Garden {
private:
    void rarePlant() const {
        std::cout << "Watering a rare plant." << std::endl;
    }

    // 声明Gardener的特定成员函数为友元
    friend void Gardener::careForPlant(const Garden&);
};

// Gardener 类成员函数定义
void Gardener::careForPlant(const Garden& g) {
    std::cout << "Gardener is caring for a plant." << std::endl;
    g.rarePlant(); // 访问并照顾花园的稀有植物
}

int main() {
    Garden garden;
    Gardener gardener;
    gardener.careForPlant(garden);  // 园艺师照顾花园的稀有植物

    return 0;
}